package com.cooltechworks.creditcarddesign.pager; import android.os.Bundle; import android.text.Editable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import com.cooltechworks.creditcarddesign.CreditCardUtils; import com.cooltechworks.creditcarddesign.R; import static com.cooltechworks.creditcarddesign.CreditCardUtils.EXTRA_CARD_NUMBER; import static com.cooltechworks.creditcarddesign.CreditCardUtils.MAX_LENGTH_CARD_NUMBER; import static com.cooltechworks.creditcarddesign.CreditCardUtils.MAX_LENGTH_CARD_NUMBER_WITH_SPACES; /** * Created by sharish on 9/1/15. */ public class CardNumberFragment extends CreditCardFragment { EditText mCardNumberView; public CardNumberFragment() { } public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle state) { View v = inflater.inflate(R.layout.lyt_card_number, group, false); mCardNumberView = (EditText) v.findViewById(R.id.card_number_field); String number = ""; if (getArguments() != null && getArguments().containsKey(EXTRA_CARD_NUMBER)) { number = getArguments().getString(EXTRA_CARD_NUMBER); } if (number == null) { number = ""; } mCardNumberView.setText(number); mCardNumberView.addTextChangedListener(this); return v; } @Override public void afterTextChanged(Editable s) { int cursorPosition = mCardNumberView.getSelectionEnd(); int previousLength = mCardNumberView.getText().length(); String cardNumber = CreditCardUtils.handleCardNumber(s.toString()); int modifiedLength = cardNumber.length(); mCardNumberView.removeTextChangedListener(this); mCardNumberView.setText(cardNumber); mCardNumberView.setSelection(cardNumber.length() > MAX_LENGTH_CARD_NUMBER_WITH_SPACES ? MAX_LENGTH_CARD_NUMBER_WITH_SPACES : cardNumber.length()); mCardNumberView.addTextChangedListener(this); if (modifiedLength <= previousLength && cursorPosition < modifiedLength) { mCardNumberView.setSelection(cursorPosition); } onEdit(cardNumber); if (cardNumber.replace(CreditCardUtils.SPACE_SEPERATOR, "").length() == MAX_LENGTH_CARD_NUMBER) { onComplete(); } } @Override public void focus() { if (isAdded()) { mCardNumberView.selectAll(); } } }